#!/bin/bash  

# ============================  
# OpenSSL 安装与配置脚本（使用 LD_LIBRARY_PATH 和 PATH）  
# ============================  

set -euo pipefail  

# 配置变量  
VER="3.2.1"  
CUROPENSSL="openssl-${VER}"  
DOWNLOAD_URL="https://www.openssl.org/source/${CUROPENSSL}.tar.gz"  

# 设置工作目录  
ROCHOME="$HOME"  
SRC_DIR="${ROCHOME}/rocopenssl_src"  
BUILD_DIR="${ROCHOME}/rocopenssl_build"  
INSTALL_DIR="${ROCHOME}/rocopenssl"  
TARBALL="${ROCHOME}/${CUROPENSSL}.tar.gz"  

# 创建必要的目录  
mkdir -p "${SRC_DIR}" "${BUILD_DIR}" "${INSTALL_DIR}"  

# 下载并解压源码  
if [ ! -f "${TARBALL}" ]; then  
    echo "下载 OpenSSL ${VER}..."  
    wget -O "${TARBALL}" "${DOWNLOAD_URL}"  
    
    echo "解压 ${CUROPENSSL}.tar.gz 到 ${SRC_DIR} ..."  
    tar -zxvf "${TARBALL}" -C "${SRC_DIR}"  
fi  

# 编译和安装 OpenSSL  
cd "${SRC_DIR}/${CUROPENSSL}"  

# 检查是否已经编译  
if [ ! -f "${BUILD_DIR}/Makefile" ]; then  
    echo "配置 OpenSSL..."  
    ./config --prefix="${BUILD_DIR}" --openssldir="${INSTALL_DIR}"   
    # 或者使用 ./config shared 可生成共享库  
fi  

echo "编译 OpenSSL..."  
make -j"$(nproc)"  

echo "安装 OpenSSL 到 ${BUILD_DIR}..."  
make install_sw  

# 设置环境变量  
echo "配置环境变量..."  

# 创建一个环境变量设置脚本  
ENV_SCRIPT="${ROCHOME}/openssl_env.sh"  

cat > "${ENV_SCRIPT}" << EOF  
# OpenSSL 环境变量设置  
export PATH="${BUILD_DIR}/bin:\$PATH"  
export LD_LIBRARY_PATH="${BUILD_DIR}/lib:\$LD_LIBRARY_PATH"  
export PKG_CONFIG_PATH="${BUILD_DIR}/lib/pkgconfig:\$PKG_CONFIG_PATH"  
EOF  

echo "环境变量脚本已创建：${ENV_SCRIPT}"  
echo "为了使环境变量生效，请运行："  
echo "  source ${ENV_SCRIPT}"  
echo "或者将以下内容添加到您的 shell 配置文件（如 ~/.bashrc 或 ~/.zshrc）："  
echo ""  
cat "${ENV_SCRIPT}"  
echo ""  

# 验证安装  
echo "验证 OpenSSL 版本:"  
"${BUILD_DIR}/bin/openssl" version  

sudo cp  "${BUILD_DIR}/bin/openssl" /usr/bin/  

# 清理下载的压缩包（可选）  
echo "是否要删除下载的压缩包（y/n）?"  
read -r CLEAN_CHOICE  
if [[ "${CLEAN_CHOICE}" =~ ^[Yy]$ ]]; then  
    rm -f "${TARBALL}"  
    echo "压缩包已删除。"  
else  
    echo "保留压缩包。"  
fi  

echo "OpenSSL ${VER} 安装与配置完成。"  
echo "请确保已运行 'source ${ENV_SCRIPT}' 或将其添加到您的 shell 配置文件中，以使用新安装的 OpenSSL。"
